<h1 id="vmstat">vmstat</h1>
<p>显示虚拟内存状态</p>
<h2 id="补充说明">补充说明</h2>
<p><strong>vmstat命令</strong> 的含义为显示虚拟内存状态（“Viryual Memor Statics”），但是它可以报告关于进程、内存、I/O等系统整体运行状态。</p>
<h3 id="语法">语法</h3>
<pre><code class="language-bash">vmstat(选项)(参数)</code></pre>
<h3 id="选项">选项</h3>
<pre><code class="language-bash">-a：显示活动内页；
-f：显示启动后创建的进程总数；
-m：显示slab信息；
-n：头信息仅显示一次；
-s：以表格方式显示事件计数器和内存状态；
-d：报告磁盘状态；
-p：显示指定的硬盘分区状态；
-S：输出信息的单位。</code></pre>
<h3 id="参数">参数</h3>
<ul>
<li>事件间隔：状态信息刷新的时间间隔；</li>
<li>次数：显示报告的次数。</li>
</ul>
<h3 id="实例">实例</h3>
<pre><code class="language-bash">vmstat 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    320  42188 167332 1534368    0    0     4     7    1    0  0  0 99  0  0
 0  0    320  42188 167332 1534392    0    0     0     0 1002   39  0  0 100  0  0
 0  0    320  42188 167336 1534392    0    0     0    19 1002   44  0  0 100  0  0
 0  0    320  42188 167336 1534392    0    0     0     0 1002   41  0  0 100  0  0
 0  0    320  42188 167336 1534392    0    0     0     0 1002   41  0  0 100  0  0
</code></pre>
<p><strong>字段说明：</strong></p>
<p>Procs（进程）</p>
<ul>
<li>r: 运行队列中进程数量，这个值也可以判断是否需要增加CPU。（长期大于1）</li>
<li>b: 等待IO的进程数量。</li>
</ul>
<p>Memory（内存）</p>
<ul>
<li>swpd: 使用虚拟内存大小，如果swpd的值不为0，但是SI，SO的值长期为0，这种情况不会影响系统性能。</li>
<li>free: 空闲物理内存大小。</li>
<li>buff: 用作缓冲的内存大小。</li>
<li>cache: 用作缓存的内存大小，如果cache的值大的时候，说明cache处的文件数多，如果频繁访问到的文件都能被cache处，那么磁盘的读IO bi会非常小。</li>
</ul>
<p>Swap</p>
<ul>
<li>si: 每秒从交换区写到内存的大小，由磁盘调入内存。</li>
<li>so: 每秒写入交换区的内存大小，由内存调入磁盘。</li>
</ul>
<p>注意：内存够用的时候，这2个值都是0，如果这2个值长期大于0时，系统性能会受到影响，磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存（free）很少的或接近于0时，就认为内存不够用了，不能光看这一点，还要结合si和so，如果free很少，但是si和so也很少（大多时候是0），那么不用担心，系统性能这时不会受到影响的。</p>
<p>IO（现在的Linux版本块的大小为1kb）</p>
<ul>
<li>bi: 每秒读取的块数</li>
<li>bo: 每秒写入的块数</li>
</ul>
<p>注意：随机磁盘读写的时候，这2个值越大（如超出1024k)，能看到CPU在IO等待的值也会越大。</p>
<p>system（系统）</p>
<ul>
<li>in: 每秒中断数，包括时钟中断。</li>
<li>cs: 每秒上下文切换数。</li>
</ul>
<p>注意：上面2个值越大，会看到由内核消耗的CPU时间会越大。</p>
<p>CPU（以百分比表示）</p>
<ul>
<li>us: 用户进程执行时间百分比(user time)</li>
</ul>
<p>us的值比较高时，说明用户进程消耗的CPU时间多，但是如果长期超50%的使用，那么我们就该考虑优化程序算法或者进行加速。</p>
<ul>
<li>sy: 内核系统进程执行时间百分比(system time)</li>
</ul>
<p>sy的值高时，说明系统内核消耗的CPU资源多，这并不是良性表现，我们应该检查原因。</p>
<ul>
<li>wa: IO等待时间百分比</li>
</ul>
<p>wa的值高时，说明IO等待比较严重，这可能由于磁盘大量作随机访问造成，也有可能磁盘出现瓶颈（块操作）。</p>
<ul>
<li>id: 空闲时间百分比</li>
</ul>
<!-- Linux命令行搜索引擎：https://jaywcjlove.github.io/linux-command/ -->
